package com.baosight.risk.api.fltd;

import java.util.List;
import java.util.Map;

import com.baosight.risk.service.fltd.entity.FltdProcess;
import com.baosight.risk.service.fltd.entity.Tewpd01;
import com.baosight.risk.service.fltd.vo.FltdProcessVO;
import com.baosight.risk.service.fltd.vo.FltdTaskVO;
import com.baosight.risk.service.system.entity.SysOperLog;
import com.baosight.risk.service.xtzy.entity.XtzyUser;

/**
 * 作者： lishaoqing
 * 时间： 2019年07月19日
 * 描述： FltdProcessService
 * 版本: v1.0
 */
public interface FltdProcessService {

    /**
     * 新增流程实例
     *
     * @param fltdProce 流程实例对象
     * @return 执行结果
     */
    Integer insert(FltdProcess fltdProce);

    /**
     * 根据流程实例id查询流程实例
     *
     * @param procGuid 流程实例id
     * @return 流程实例
     */
    FltdProcess selectProcessById(String procGuid);
    
    FltdProcess selectProcessByBizGuid(String bizGuid);

    /**
     * 查询所有流程实例
     *
     * @return 流程实例
     */
    List<FltdProcessVO> list(FltdProcessVO fltdProcess);

    /**
     * 查询所有流程定义
     *
     * @return 流程定义
     */
    List<Tewpd01> getAllProcess();

    /**
     * 启动流程
     *
     * @param vo 流程任务vo
     */
    void doStart(FltdTaskVO vo) throws Exception;

    /**
     * 提交流程
     *
     * @param user 当前用户
     * @param vo   流程任务vo
     */
    void doSubmit(XtzyUser user, FltdTaskVO vo) throws Exception;

    /**
     * 撤回流程
     *
     * @param user 当前用户
     * @param vo   流程任务vo
     */
    void doCancel(XtzyUser user, FltdTaskVO vo) throws Exception;

    /**
     * 待办移交
     *
     * @param user 当前用户
     * @param vo   流程任务vo
     */
    void doReassign(XtzyUser user, FltdTaskVO vo) throws Exception;

    /**
     * 更新流程实例状态
     *
     * @param fltdProcess 流程实例
     * @return 执行结果
     */
    int updateProcessStatus(FltdProcess fltdProcess);

    /**
     * 获取流程定义id
     *
     * @param processInstanceId 流程实例id
     * @return 流程定义id
     */
    String getProcessDefId(String processInstanceId);

    /**
     * 获取用户当前流程实例的任务id
     *
     * @param sysUser           当前用户
     * @param processInstanceId 流程实例id
     * @return 任务id
     */
    String getTaskId(XtzyUser sysUser, String processInstanceId);

    /**
     * 转换扩展属性
     *
     * @param flowNo    流程编码
     * @param nodeCode  节点编码
     * @param variables 扩展属性map
     * @return 转换结果
     */
    boolean convertExt(String flowNo, String nodeCode, Map<String, Object> variables);

    /**
     * 获取流程启动人
     */
    XtzyUser getStarter();

    /**
     * 工作流操作日志
     */
    SysOperLog getLog(String title, int status, String message, String jobId);

    /**
     * 查询流程节点提交策略
     * @param processDefId 流程定义id
     * @param nodeKey 节点编码
     * @return 节点提交策略
     */
    String selectDecideType(String processDefId, String nodeKey);
    /**
     * 移交待办
     * @param compCode
     * @param newUserCode
     * @param oldUserCode
     */
    void shiftProcess(String compCode,String newUserCode,String oldUserCode)  throws Exception ;

}
